package com.xpffly.design.handler.service;

/**
 * @Author: xpengfei
 * @Date: 2021/4/7 21:06
 * @Description：处理请求的handler类
 */
public abstract class Handler {
    /**
     * 父亲能处理的请求级别
     */
    public static final int FATHER_LEVEL_REQUEST = 0;
    /**
     * 丈夫能处理的请求级别
     */
    public static final int HUSBAND_LEVEL_REQUEST = 1;
    /**
     * 儿子能处理的请求级别
     */
    public static final int SON_LEVEL_REQUEST = 2;

    /**
     * 能处理的级别
     */
    private int level = 0;
    /**
     * 责任传递，下一个责任人是谁
     */
    private Handler nextHandler;

    /**
     * 每个类都需要说明自己能处理的请求级别
     *
     * @param level
     */
    public Handler(int level) {
        this.level = level;
    }

    /**
     * 处理妇女发起的请求
     *
     * @param women
     */
    public final void handleRequest(Women women) {
        if (women.getType() == this.level) {
            this.response(women);
        } else {
            if (this.nextHandler != null) {
                // 无权限处理且有下一个处理人时，将请求传递给下一个处理人
                this.nextHandler.handleRequest(women);
            } else {
                // 无权限处理且没有下一个处理人了
                System.out.println("----------无处理人，默认不同意-------");
            }
        }
    }

    /**
     * 无权处理时，将请求传递给下一个处理人
     *
     * @param nextHandler
     */
    public void setNextHandler(Handler nextHandler) {
        this.nextHandler = nextHandler;
    }

    /**
     * 有请求处理权限时，对请求作出相应
     *
     * @param women
     */
    public abstract void response(Women women);
}
